package com.ddzh.utils;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

public class UploadUtils {
    /** Endpoint以杭州为例，其它Region请按实际情况填写。  oss-cn-shanghai.aliyuncs.com
     regin的域名
    */
    private static final String endpoint = "https://oss-cn-shanghai.aliyuncs.com";

    // 云账号AccessKey有所有API访问权限，建议遵循阿里云安全最佳实践，创建并使用RAM子账号进行API访问或日常运维，请登录 https://ram.console.aliyun.com 创建。
    //用户登录名称 oss@1982102985911181.onaliyun.com；AccessKey ID LTAI4GEwvCazs1ybkx9vNkak；AccessKey Secret rGPtAwGZeFtjTZU5kHU3cV6TB5RFre
    private static final String accessKeyId = "LTAI4GEwvCazs1ybkx9vNkak";
    private static final String accessKeySecret = "rGPtAwGZeFtjTZU5kHU3cV6TB5RFre";

    private static final String bucketName = "sp-health";

    /**
     * 图片上传到oss，并返回图片名
     * 由于MultipartFile只能用在web层，所以这里只能用流和文件名拿数据
     * @param inputStream ：文件流
     * @param originalFileName ：前端上传文件的源文件名
     * @return
     * @throws FileNotFoundException
     */
    public static String fileUpload(InputStream inputStream ,String originalFileName) throws FileNotFoundException {
        // 创建OSSClient实例
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        /**
         * 参数：
         * TODO： 将常量部分提取到一个配置文件中=》不优雅
         * 桶名:写死的=》常量
         * 文件名：动态变化的，可以拿到的数据；对应oss的保存路径名，oss会自动创建响应的文件夹
         * 上传文件流：动态变化的=》前端传过来的
         */
        String path = generatorPath(originalFileName);
        //创建PutObjectRequest对象
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, path, inputStream);
        //上传文件
        ossClient.putObject(putObjectRequest);

        //关闭流
        try {
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 关闭OSSClient。
        ossClient.shutdown();
        return path;
    }

    private static String generatorPath(String originalFileName) {
        StringBuffer path = new StringBuffer();
        /**
         * 正常这里拼的是业务路径名
         */
        path.append(UUID.randomUUID().toString())//.append(".")不用追加 . 了=》自己生成
             .append(originalFileName.substring(originalFileName.lastIndexOf(".")));
        return path.toString();
    }

    /**
     * 根据路径删除 oss 文件
     * @param path
     * @return
     */
    public static boolean deleteFileName(String path) {
        // 创建OSSClient实例
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        //删除oss对象
        ossClient.deleteObject(bucketName,path);
        // 关闭OSSClient。
        ossClient.shutdown();
        return true;
    }
}
